/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-05-15
 * Time: 20:44
 */

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        if (pHead == null || pHead.next == null){
            return pHead;
        }
        // 多开辟一个头节点, 可以更简单, 不用考虑头节点就得删除的情况
        ListNode newHead = new ListNode(-1);
        ListNode tail = newHead;
        ListNode cur = pHead;
        while (cur != null){
            // cur 保证每次都是在最新的节点
            // 如果是最后一个节点或者与下一个节点不同, 那么说明只出现一次, 满足条件
            if (cur.next == null || cur.val != cur.next.val){
                tail.next = cur;
                tail = tail.next;
            }
            // 跳过值相同的节点
            while (cur.next != null && cur.val == cur.next.val){
                cur = cur.next;
            }
            cur = cur.next;
        }
        // 等到最后再置空, 如果中间置空, 记住提前把下一个节点记录下来
        tail.next = null;
        return newHead.next;
    }
}
